import store from '../store/store.js'
import apicon from './apicon.js'
// import NewMsg from './NewMsg.js'
import Vue from 'vue'
// console.log('NewMsg',NewMsg)
let that = ''
//是否已经连接上ws
let isOpenSocket = false
//心跳间隔，单位毫秒
let heartBeatDelay = 6000
let heartBeatInterval = null
//心跳时发送的消息文本
let heartBeatText = "PING"
//最大重连次数
let reconnectTimes = 10
let reconnectInterval = null
//重连间隔，单位毫秒
let reconnectDelay = 3000

let wsUrl = ''

let socketTask = null

//这个参数是防止重连失败之后onClose方法会重复执行reconnect方法，导致重连定时器出问题
//连接并打开之后可重连，且只执行重连方法一次
let canReconnect = false

//封装的对象，最后以模块化向外暴露，
//init方法 初始化socketTask对象
//completeClose方法 完全将socketTask关闭（不重连）
//其他关于socketTask的方法与uniapp的socketTask api一致
let ws = {
	socketTask: null,
	init,
	completeClose
}

function init(_this) {
	that = _this
	wsUrl = that.$apiFun.wsUrls+that.userInfo.id
	console.log('_this,wsUrl',_this,wsUrl)
	socketTask = uni.connectSocket({
		url: wsUrl,
		complete: ()=> {}
	})
	socketTask.onOpen((res) => {
		console.log("ws连接成功")
		clearInterval(heartBeatInterval)
		clearInterval(reconnectInterval)
		isOpenSocket = true
		canReconnect = true
		//开启心跳机制
		heartBeat()
	})
	uni.onSocketError((err)=>{
		console.log('onSocketError', err)
	})
	socketTask.onMessage((res) => {
		//自定义处理onMessage方法
		// const {data} = res
		// if(data.indexOf('msgId')!=-1){
		// 	let obj = JSON.parse(data)
		// 	if(!obj.busType){
		// 		let arr = obj.msgTxt.split('$')
		// 		console.log('arr',arr)
		// 		let objs = {
		// 			anntId:obj.msgId,
		// 			msgContent:arr[0],
		// 			sendTime:arr[3],
		// 			userId:obj.userId,
		// 			titile:'【'+arr[2]+'】'+'告警'
		// 		}
		// 		NewMsg.postNewMsg(objs)
		// 		mediaFun()
		// 	}
			
		// }
		console.log('soket接收到了后端的以下消息---',res)
		that.$bus.$emit('soketEmitFun',res)
		onFeedTap()
		// const {data} = res
			// let obj = JSON.parse(data)
			// if(!obj.busType){
			// 	let arr = obj.msgTxt.split('$')
			// 	console.log('arr',arr)
			// 	let objs = {
			// 		anntId:obj.msgId,
			// 		msgContent:arr[0],
			// 		sendTime:arr[3],
			// 		userId:obj.userId,
			// 		titile:'【'+arr[2]+'】'+'告警'
			// 	}
			// 	NewMsg.postNewMsg(objs)
			// 	// 消息提醒震动
				// mediaFun()
			// }
	})
	socketTask.onClose(() => {
		if(isOpenSocket){
			console.log("ws与服务器断开")
		}else{
			console.log("连接失败")
		}
		isOpenSocket = false
		if(canReconnect){
			reconnect()
			canReconnect = false
		}
	})
	ws.socketTask = socketTask
}

function heartBeat() {
	heartBeatInterval = setInterval(() => {
		send(JSON.stringify(heartBeatText));
	}, heartBeatDelay)
}

function send(value) { 
	ws.socketTask.send({
		data: value,
		async success() {
			console.log("消息发送成功")
		}
	});
}

function reconnect() {
	//停止发送心跳
	clearInterval(heartBeatInterval)
	//如果不是人为关闭的话，进行重连
	if (!isOpenSocket) {
		let count = 0;
		reconnectInterval = setInterval(() => {
			console.log("正在尝试重连")
			init(that);
			count++
			//重连一定次数后就不再重连
			if(count >= reconnectTimes){
				clearInterval(reconnectInterval)
				console.log("网络异常或服务器错误")
			}
		}, reconnectDelay)
	}
}
function completeClose(){
	//先将心跳与重连的定时器清除
	clearInterval(heartBeatInterval)
	clearInterval(reconnectInterval)
	canReconnect = false
	// console.log('isOpenSocket',isOpenSocket)
	if(isOpenSocket){
		ws.socketTask.close()
	}
	// 清空消息
	// NewMsg.hideMsg()
} 
// function playCustomSound(soundPath) {
	// let path = plus.io.convertLocalFileSystemURL('/static/media/绞车房离岗.mp3');
  // plus.audio.play({
  //   path: soundPath,
  //   duration: 1 // 音频播放时间
  // }, function() {
  //   console.log('音频播放成功');
  // }, function(error) {
  //   console.error('音频播放失败: ' + JSON.stringify(error));
  // });
// }
 // function playCustomSound(soundPath) {
 // 			let path = plus.io.convertLocalFileSystemURL(soundPath);
 // 				// Android端
 // 				// 导入声音管理类（必须步骤，不引会导致功能无法正常运行）
 // 				plus.android.importClass('android.media.AudioManager');
 // 				let main = plus.android.runtimeMainActivity(); // 获取应用主Activity实例对象
 // 				let Context = plus.android.importClass('android.content.Context'); // 全局上下文
 // 				let audioManager = main.getSystemService(Context.AUDIO_SERVICE);
 // 				let MediaPlayer = plus.android.importClass('android.media.MediaPlayer');
 // 				let AudioAttributes = plus.android.importClass('android.media.AudioAttributes');
 // 				let innerAudioContext = new MediaPlayer();
 // 				// Android中的接口实现使用plus.android.implements，注意接口名称类与接口方法之间要用符号$连接
 // 				let event = plus.android.implements('android.media.MediaPlayer$OnCompletionListener', {
 // 					onCompletion: () => {
 // 						if (this.audioFocus) {
 // 							audioManager.abandonAudioFocus(null); // 放弃音频焦点
 // 							this.audioFocus = false;
 // 						}
 // 					}
 // 				});
	// console.log('path------123',path)
 // 				innerAudioContext.setOnCompletionListener(event); // 设置播放完毕监听
 // 				innerAudioContext.setDataSource(path); // 设置播放器播放音频
 // 				innerAudioContext.setAudioAttributes(AudioAttributes.CONTENT_TYPE_SONIFICATION); // 设置音频属性，CONTENT_TYPE_SONIFICATION为短暂提示音
 // 				innerAudioContext.prepare();
 			
	// 	}


function mediaFun(){
	// 消息提醒与震动添加
		let main = plus.android.runtimeMainActivity();
		let RingtoneManager = plus.android.importClass("android.media.RingtoneManager");
		let uri = RingtoneManager.getActualDefaultRingtoneUri(main, RingtoneManager.TYPE_NOTIFICATION);
		let MediaPlayer = plus.android.importClass("android.media.MediaPlayer");
		let player = MediaPlayer.create(main, uri);
		player.setLooping(false);
		player.prepare();
		player.start();
		// 震动功能
		plus.device.vibrate(500);  
	}
//手机震动
function onFeedTap() {
			let platform=uni.getSystemInfoSync().platform
			// #ifdef APP-PLUS
			if (platform == "ios") {
				let UIImpactFeedbackGenerator = plus.ios.importClass('UIImpactFeedbackGenerator');
				let impact = new UIImpactFeedbackGenerator();
				impact.prepare();
				impact.init(1);
				impact.impactOccurred();
			}
			if (platform == "android") {
				uni.vibrateShort();
			}
			// #endif
			
			// #ifdef MP-WEIXIN
				uni.vibrateShort();
			// #endif
		}
module.exports = ws